Graph search using index vertices

ABSTRACT

Systems, methods, and software described herein provide graph searching via index vertices. In one implementation, a graph management system may receive a request to identify vertices of a first vertex type in a graph, wherein the request defines one or more attributes associated with the vertices. In response to the request, the graph management system may identify one or more index vertices associated with the one or more attributes, wherein the one or more index vertices is associated with one or more second vertex types. The graph management system may further identify the vertices in the graph with edges that couple to the one or more index vertices.

RELATED APPLICATIONS

This application hereby claims the benefit and priority to U.S.Provisional Patent Application 62/892,137, titled “GRAPH SEARCH USINGINDEX VERTICES” filed Aug. 27, 2019, and which is hereby incorporated byreference in its entirety.

BACKGROUND

Relational databases generally store data in one or more tables withrows and columns for the various data items. In contrast, graphdatabases represent data in the form of vertices and edges, where avertex represents an entity or data instance, and an edge represents arelationship of some type between any two vertices. Graph databaserepresentations allow data modeling that more closely parallels the realworld and provides a visual representation of connected data. Ingeneral, a graph is a set of objects, called vertices, nodes, or points,which are connected by links, called lines or edges. The edges establishrelationships (connections) between the vertices. Graphs can be directedor undirected. In an undirected graph, an edge from point A to point Bis considered to be the same as a line from point B to point A. In adirected graph, the two directions are treated as distinct directededges.

Although graph databases provide an efficient manner for storing data,difficulties can arise in efficiently responding to queries of thegraph. In particular, as graphs expand with a greater quantity ofvertices and edges, queries to the graphs may consume additionalprocessing and time resources to search the graph and respond to thequeries. These difficulties are often compounded when each of thevertices includes multiple searchable attributes, such as names, ages,birthdays, or other similar attributes, requiring a system to traversethe vertices of the graph to identify vertices (or edges) with arelevant attribute.

OVERVIEW

Provided herein are enhancements to improve graph searches related tomultiple attributes of vertices. In one implementation, a methodincludes receiving a request to identify vertices of a first vertex typein a graph, the vertices associated with one or more attributes. Themethod further includes identifying one or more index verticesassociated with the one or more attributes, wherein the one or moreindex vertices corresponds to one or more second vertex types. Themethod also includes identifying the one or more vertices in the graphwith edges that couple to the plurality of index vertices.

BRIEF DESCRIPTION OF THE DRAWINGS

Many aspects of the disclosure can be better understood with referenceto the following drawings. While several implementations are describedin connection with these drawings, the disclosure is not limited to theimplementations disclosed herein. On the contrary, the intent is tocover all alternatives, modifications, and equivalents.

FIG. 1 illustrates a graph with different vertex types according to animplementation.

FIG. 2 illustrates vertices of a first vertex type according to animplementation.

FIG. 3 illustrates an index vertex to provide additional indexing for agraph according to an implementation.

FIG. 4 illustrates an operation of a graph management system accordingto an implementation.

FIGS. 5A and 5B illustrate an operational scenario of identifyingvertices of interest in a graph using index vertices according to animplementation.

FIG. 6 illustrates a graph management computing system according to animplementation.

DETAILED DESCRIPTION

Examples herein provide operations to identify vertices of interest in agraph using index vertices. In one implementation, a graph managementsystem may maintain a graph that includes a plurality of vertices and aplurality of edges that are used to define relationships between theplurality of vertices. Here, a graph may include vertices of varioustypes, wherein a first vertex type may correspond to data instance thatcomprises multiple attributes (referred to herein as data instancevertices). These attributes may comprise a unique identifier for thevertex or data instance, numerical values, descriptive information forthe data instance, or some other attribute for the data instance. As anexample, a graph of a social network may include data instance verticesthat correspond to users of the social network. Each of the datainstance vertices may include a unique identifier associated with theuser, which may be used as a primary index, the age of the user, thelocation of the user, or some other attribute of the user. Here, inaddition to the data instance vertices, additional vertices may be addedto the graph that can be used to provide indexing based on differentattributes of the data instances. Referring again to the social networkexample, data instance vertices representing users may be indexed usinga first attribute that corresponds to a unique identifier for theindividual user. However, additional vertices may be added to the graph,referred to as index vertices, that can be used to index the users basedon attributes other than the unique identifiers. These attributes mayinclude age, location, occupation, or some other attribute of the user.Thus, rather than using a single index to search the data instances ofthe graph, index vertices may be added to the graph permitting the graphto be indexed using multiple attributes of the data instances.

Once a graph is generated with the data instance vertices and the indexvertices, queries may be generated to obtain information from the graph.For example, a query may be generated for the graph that requests a listof users in a social network that are in a first geographic location andare a defined age. In response to the query, the graph management systemmay identify index vertices that correspond to the location and the agerequirements and determine data instance vertices that are coupled toboth the location index and the age vertex. In some implementations, thegraph management system may generate metadata or flags associated witheach of the data instance vertices. For example, the graph managementsystem may add a flag to a data instance vertex when it is coupled to anindex vertex of interest. When a data instance vertex receives therequired quantity of flags, then the data instance vertex may bedetermined to be relevant to the query. Returning to the example of thequery to a social network with an age requirement and a locationrequirement, the graph management system may determine which datainstance vertices are allocated two flags or metadata values andidentify the data instance vertices as vertices of interest to respondto the query. Advantageously, adding flags or metadata to thecorresponding data instance vertices while implementing the search ofthe graph may permit the graph management system to efficiently identifydata instance vertices of interest that correspond to a query.

FIG. 1 illustrates a graph 100 with different vertex types according toan implementation. Graph 100 includes vertices 110-114 of vertex type130, wherein vertex type 130 are representative of data instancevertices. Graph 100 further includes vertices 120-121 and vertex 125that correspond to vertex types 131-132, wherein vertex types 131-132each correspond to an index vertex type. Vertices 110-114, 120-121, and125 are coupled via edges of edge types 170 and 175-176. Edge type 170is representative of an edge type that is used to couple the datainstance vertices, while edge types 175-176 are used to couple orconnect the data instance vertices to corresponding index vertices ofvertex types 131-132.

In operation, a graph management system may generate graph 100 to managedata and provide search operations on the data. Graph 100 includesvertices 110-114 that are representative of data instance vertices thatcan be used represent various entities or data objects. These dataobjects may include users of a social network, employees of anorganization, buildings or other physical elements, or some other dataobject. Each data instance vertex in vertices 110-114 may comprise aplurality of attributes corresponding to the object. For example, a userin a social network may include a unique identifier associated with theuser, a location of the user, an age of the user, employment informationfor the user, or some other information for the user. To index vertices110-114, the unique identifier may be used to distinguish each of theindividual vertices, wherein the unique identifier may comprise anumerical value, a name, a combination of characters, or some otherunique identifier for the data instance. Here, in addition to indexingvertices 110-114 using a unique identifier associated with each of thevertices, vertices 120-121 and 125 are added to enhance searches forinformation related to vertices 110-114.

Vertices 120-121 and 125 may be added to the graph in response to arequest of an administrator associated with the graph, may be addedbased on query trends to graph 100, or may be added via any othermechanism. Vertices 120-121 and 125 may represent attributes that can beshared by two or more of data instance vertices 110-114. For example, ina social network, vertex types 130-131 may represent ages of the usersin the social network (range or exact value), locations of the users ina social network, or some other attribute that can be shared by two ormore users in the social network. In deploying vertices 120-121 and 125,the graph management system may determine attributes in the datainstances related to the particular attribute type and generate verticesthat correspond to the identified attributes. Thus, if the users of asocial network resided in three locations, then three index vertices maybe generated that correspond to the identified attributes. Oncegenerated, edges may be used to connect the generated index verticeswith data instance vertices that include the corresponding attribute.

Advantageously, by adding vertex types 131-132 to graph 100, the graphmanagement system may use vertex types 131-132 to efficiently identifyrelevant data instance vertices for a query and use the data instancevertices to respond to the query. In some implementations, the queriesto graph 100 may require the identification of data instances thatinclude multiple attributes. Rather than traversing the data instancevertices 110-114, the graph management system may identify indexvertices of vertex types 131-132 that correspond to the attributes inthe query and use the index vertices to identify the relevant datainstance vertices in graph 100. Once identified, the graph managementsystem may respond to the query using information obtained from theidentified data instance vertices.

FIG. 2 illustrates vertices 112-113 of a first vertex type from graph100 of FIG. 1 according to an implementation. Vertices 112-113 arerepresentative of data instance vertices from graph 100, wherein thedata instance vertices may represent members of a social media network,employees of an organization, buildings, devices, or some other similarobject or data element. Each vertex includes attributes that correspondto attribute types 220-223. In particular vertex 112, includesattributes 210-213, and vertex 113 includes attributes 250-251 and211-212.

Here, vertices 112-113 are each indexed using attribute type 220,wherein attribute type 220 may correspond to a unique identifier for thevertex that can be used to distinguish the vertex from other vertices ofthe same vertex type. For example, if graph 100 represented employees ofthe organization, attribute type 220 may correspond to an employeenumber or some other value that is used to differentiate each of theemployees of the organization. In addition to the unique identifier,each of the data instance vertices may include additional attributesthat can provide additional information about the data instance. Theadditional attributes may be shared among one or more other datainstances of graph 100, wherein the attributes may correspond to ages,locations, occupations, or some other attribute that can be sharedbetween multiple data instance vertices.

Although demonstrated in the example of FIG. 2 as including fourattributes as part of the data instance, it should be understood thatany number of attributes may be associated with a data instance.Further, while all the vertices may comprise the same attributes, atleast a portion of the vertices may only contain a subset of theattributes. As a result, the index vertices may only be connected todata instance vertices that include a corresponding attribute.

FIG. 3 illustrates an index vertex 125 from graph 100 of FIG. 1 toprovide additional indexing for a graph according to an implementation.Vertex 125 is representative of a vertex of vertex type 132, whereinvertex type 132 may be used to provide additional indexing for vertices110-114. In particular, while vertices of vertex type 130 are indexedusing a first attribute, vertex type 132 may be used to further indexvertices of vertex type 130 using a second attribute.

Here, vertex 125 is used to index vertices using attribute 212 ofattribute type 222. Because vertices 112-113 include attribute 212 ofattribute type 222, a graph management system may generate an edge thatconnects vertices 112-113 to vertex 125, such that vertex 125 can beused to assist in queries related to attribute 212 and attribute type222. For example, if attribute type 222 corresponds to locations andattribute 212 corresponds to a particular location, then the graphmanagement system may identify any of the data instance vertices thatinclude the attribute for the particular location. Once identified,edges may be generated that can couple the index vertex to the datainstance vertices.

Once the graph is generated with the data instance vertices as well asthe index vertices, queries may be generated to the graph that requestinformation related to the graph. Referring to a social media example, aquery may be generated to identify all users associated with aparticular location and a particular occupation. In response to therequest, the graph management system may identify index vertices in thegraph that correspond to the attributes defined in the query. Afteridentifying the index vertices, the graph management system may identifydata instance vertices that connect to all of the index vertices andgenerate a response to the query using the identified data instancevertices. The response may include providing, for display, one or moreattributes from the identified data instance vertices, a quantity ofdata instance vertices that were identified, or some other informationto respond to the query.

FIG. 4 illustrates an operation 400 of a graph management systemaccording to an implementation. The processes of operation 400 arereferenced parenthetically in the paragraphs that follow with referenceto elements of graph 100 of FIG. 1 .

As depicted, a graph management system may receive (401) a request toidentify one or more vertices of a first type associated with one ormore attributes. As described herein, a graph, such as graph 100, mayinclude data instance vertices that each comprise attributes thatprovide information about the data instance. To index or identify eachof the individual data instance vertices, the data instance vertices maybe indexed according to first attribute type, wherein the attribute typemay comprise a unique identifier for the data instance. The uniqueidentifier may comprise a number, a name, a combination of characters,or some other unique identifier capable of distinguishing the verticesof the first type.

Once the request is received, the graph management system furtheridentifies (402) one or more index vertices associated with the one ormore attributes, wherein the one or more index vertices corresponds toone or more second vertex types. In some implementations, in addition tothe data instance vertices of a graph, additional vertex types may beadded to the graph to assist in search operations associated with thegraph. As an example of a social network graph, users of the socialnetwork may be represented in the graph as data instance vertices. Inaddition to the data instance vertices, additional vertex types may beincluded, wherein the vertex types may each represent a location vertextype associated with location attributes of the end users, an age vertextype associated with age attributes of the end users, or some othervertex type. For each of the vertex types, one or more index verticesmay be added to the graph that correspond to attributes identified inthe data instance vertices that correspond to the vertex type. Thus,referring to the location vertex type, one or more vertices may be addedto the graph that correspond to different locations identified in thedata instance vertices. Once the index vertices are added to a graph,queries to the graph may use the index vertices to respond to thequeries.

In some examples, in response to a query, the graph management systemmay determine index vertices that correspond to the requirements of thequery. Referring again to the social network graph, when a query isgenerated to identify users associated with a first location and a firstoccupation, the graph management system will identify index verticesthat correspond to the attributes (location and occupation) defined inthe query. In some examples, to identify the index vertices, the graphmanagement system may identify an attribute type and correspondingvertex type associated with the attribute in the query, then determinewhich of the index vertices corresponds to the attribute of the query.

After identifying the one or more index vertices associated with the oneor more attributes from the request, the graph management systemidentifies (403) the one or more vertices in the graph with edges thatcouple to the one or more index vertices. In some implementations, todetermine which of the first type vertices or data instance vertices arecoupled to the relevant index vertices, the graph management system mayuse flags or metadata values to determine the quantity of index verticesthat are coupled to the various data instance vertices in a graph. Forexample, if three index vertices were identified for attributes in arequest, the graph management system may, for each of the indexvertices, generate a flag or metadata value for the data instancevertices that are coupled to the index vertex. After generating themetadata values for the data instance vertices, a subset of the datainstance vertices is identified based on the metadata, wherein themetadata may indicate that all three of the relevant index vertices arecoupled to the subset. The subset of data instance vertices may be thenbe used to respond to the request.

In one implementation, the tagging of the data instance vertices thatare coupled to the relevant index vertices may be accomplished inparallel. For example, a first index vertex may tag the data instancevertices that are coupled to the first index vertex, while a secondindex vertex may tag the data instance vertices that are coupled to thesecond index vertex. In other implementations, the tagging of the dataindex vertices may be accomplished in serial, wherein data instancevertices that are coupled to a first index vertex are determined priorto data instance vertices that are coupled to a second index vertex. Asan example, the graph management system may for a first index vertex,identify and tag first data instance vertices that are coupled to thefirst index vertex. Once completed, the graph management system may, fora second index vertex, identify and tag any of the first data instancevertices identified for the first index vertex that are also coupled tothe second index vertex. The first data instance vertices that are alsotagged as being coupled to the second index vertex may then beclassified as second data instance vertices. The operation may berepeated as many times as is required to identify the data instancevertices to respond to the request.

In some implementations, the request to identify the data instancevertices may correspond to a user or automated system query to thegraph. In particular, the query may attempt to identify information fromthe data instance vertices based on attributes of the data instancevertices. An example query may include, identifying the average age ofusers in a social network that have a first occupation and are locatedin a specific location. In response to the query, the graph managementsystem may determine the searchable attributes for the graph, whichwould include the occupation and location, identify index vertices (ifavailable) associated with the attributes, and search the graph usingthe index vertices to identify the relevant data instance vertices. Oncethe data instance vertices are identified, the graph management systemmay perform additional operations to respond to the query, wherein theoperations may include identifying attributes in the data instancevertices, averaging attributes in the data instance vertices,determining a most frequent value in the attributes, generating adisplay based on the attributes of the data instance vertices, or someother operation to respond to the query.

FIGS. 5A and 5B illustrate an operational scenario of identifyingvertices of interest in a graph using index vertices according to animplementation. FIG. 5A includes vertices 110-114, 120-121, and 125 fromgraph 100 of FIG. 1 . FIG. 5B includes vertices 112-113, 121, and 125.The operational scenario of FIGS. 5A and 5B is representative of anoperation that may be accomplished using a graph management system thatcan operate using one or more computing systems, such as servercomputing systems, desktop computing systems, or some other computingsystem.

Referring to FIG. 5A, a graph management system may obtain a request toidentify one or more vertices of a first type associated with one ormore attributes. Here, the graph management system identifies, at step1, a request to identify one or more vertices of vertex type 130 thatare associated with two attributes. The two attributes are associatedwith vertices 121 and 125, wherein vertex 121 corresponds to a vertextype 131 and vertex 125 corresponds to a vertex type 132. Vertex types131-132 are representative of index vertex types that can be used toprovide supplemental indexing for data instance vertices in a graph. Inparticular, data instance vertices, represented as vertices 110-114, mayinclude a variety of attributes and may be indexed using a first one ofthe attributes. This indexing may include a unique identifier, such as aunique set of characters, numbers, or some other unique identifier thatcan be used to distinguish vertices 110-114. Here, vertices 120-121 and125 correspond to attributes other than the indexing attribute used invertices 110-114. For example, an organization the data instancevertices 110-114 may correspond to employees of the organization and theindex for vertices 110-114 may correspond to a unique identifier for theemployees. However, index types 131-132 may correspond to otherattributes for the employees, including the occupation of the employees,the home office of the employees, or some other information of theemployees. Thus, rather than only traversing the data instance verticesto identify required information, the graph management system may usethe index vertices of vertex types 131-132 to more efficiently identifythe data instance vertices of interest.

Turning to FIG. 5B, once the corresponding index vertices of the requestare identified, the graph management system may identify, at step 2,data instance vertices that are coupled to both of the index vertices.In some implementations, the graph management system may use tags thatcan maintain information about the quantity of index vertices thatconnect to the data instance vertices. As an example, when the graphmanagement system determines the data instance vertices that are coupledto vertex 125, the graph management system may tag each of vertices112-113. Similarly, when the graph management system determines the datainstance vertices that are coupled to vertex 121, the graph managementsystem may tag vertices 112-114. Here, because the graph managementsystem is attempting to identify the data instance vertices that arecoupled to both vertex 121 and vertex 125, the graph management systemwill identify vertices 112-113 as relevant because they were taggedtwice.

In some implementations, the tagging or identification of the datainstance vertices that are related to the index vertices may occur inparallel. In particular, the graph management system may tag the datainstance vertices that are related to vertex 125 and may tag the datainstance vertices that are related to vertex 121 at the same time. Oncea data instance vertex has been tagged twice, the data instance vertexmay be identified to respond to the request. In other implementations,the identification of the relevant instance vertices may occur at leastpartially in serial. For example, the graph management system may tagdata instance vertices that are coupled to vertex 125 and subsequentlytag data instance vertices that are coupled to vertex 121 that havealready been tagged as being coupled to vertex 125. Thus, since vertex114 was not tagged by the graph management system with respect to vertex125, the graph management system may ignore the connection with respectto vertex 121. In some examples, the order at which the different indexvertices are processed may be based on the quantity of data instancevertices that are coupled to the index vertices. As a result, the indexvertex coupled with the least amount of data instance vertices may beprocessed first to tag the corresponding data instance vertices. Oncetagged, the graph management system may move to the next index vertexcoupled with the least amount of data instance vertices and determinedata instance vertices that were tagged in association with the previousindex vertex and tag these data instance vertices as being coupled toboth index vertices. The process may then be repeated for as many indexvertices that are identified to support the request to the graph.Although demonstrated in the previous example as identifying datainstance vertices related to two index vertices, it should be understoodthat any quantity of index vertices may be identified to respond to arequest.

In some implementations, the request to identify relevant data instancevertices may comprise a portion of the operations to respond to a queryto the graph. As an example, a query to a graph representing a socialnetwork, may attempt to identify the average age of a user that isassociated with a particular location and occupation. Index vertices maybe used to identify the corresponding data instance vertices thatcorrespond to the users, but the graph management system may furtherextract relevant information from the corresponding data instancevertices and process the data to provide the response to the query. Theprocessing may include averaging the age of the identified users,generating a display to respond to the query, or some other process onattributes identified in the relevant data instance vertices.

Although demonstrated in the previous example as exclusively using indexvertices to identify the relevant data instance vertices, it should beunderstood that index vertices may not exist for every attribute in thedata instance vertices. In some implementations, when a query isgenerated, the graph management system may identify attributes in thequery that correspond to attribute types with index vertices in thegraph. The graph management system may then use the index vertices toidentify a first set of data instance vertices. Once the first set ofdata instance vertices are identified, the graph management system maysearch the data instance vertices to identify any other attributesrelevant to the query that do not correspond to index vertices. Fromthis search, a relevant set of data instance vertices may be determinedthat includes the required attributes from the query. Thus, in someexamples, a combination of identifying data instance vertices usingindex vertices and searching attributes in the data instance verticesmay be employed.

FIG. 6 illustrates a graph management computing system 600 according toan implementation. Computing system 600 is representative of anycomputing system or systems with which the various operationalarchitectures, processes, scenarios, and sequences disclosed herein fora graph management system may be implemented. Computing system 600comprises communication interface 601, user interface 602, andprocessing system 603. Processing system 603 is linked to communicationinterface 601 and user interface 602. Processing system 603 includesprocessing circuitry 605 and memory device 606 that stores operatingsoftware 607. Computing system 600 may include other well-knowncomponents such as a battery and enclosure that are not shown forclarity.

Communication interface 601 comprises components that communicate overcommunication links, such as network cards, ports, radio frequency (RF),processing circuitry and software, or some other communication devices.Communication interface 601 may be configured to communicate overmetallic, wireless, or optical links. Communication interface 601 may beconfigured to use Time Division Multiplex (TDM), Internet Protocol (IP),Ethernet, optical networking, wireless protocols, communicationsignaling, or some other communication format—including combinationsthereof. In at least one implementation, communication interface 601 maybe configured to communicate with one or more client computing systems,wherein the communications may be used to define queries to graph 615 orprovide a response to the queries to the client system

User interface 602 comprises components that interact with a user toreceive user inputs and to present media and/or information. Userinterface 602 may include a speaker, microphone, buttons, lights,display screen, touch screen, touch pad, scroll wheel, communicationport, or some other user input/output apparatus—including combinationsthereof. User interface 602 may be omitted in some examples.

Processing circuitry 605 comprises microprocessor and other circuitrythat retrieves and executes operating software 607 from memory device606. Memory device 606 may include volatile and nonvolatile, removableand non-removable media implemented in any method or technology forstorage of information, such as computer readable instructions, datastructures, program modules, or other data. Memory device 606 may beimplemented as a single storage device but may also be implementedacross multiple storage devices or sub-systems. Memory device 606 maycomprise additional elements, such as a controller to read operatingsoftware 607 and data for graph 615. Examples of storage media includerandom access memory, read only memory, magnetic disks, optical disks,and flash memory, as well as any combination or variation thereof, orany other type of storage media. In some implementations, the storagemedia may be a non-transitory storage media. In some instances, at leasta portion of the storage media may be transitory. In no case is thestorage media a propagated signal.

Processing circuitry 605 is typically mounted on a circuit board thatmay also hold memory device 606 and portions of communication interface601 and user interface 602. Operating software 607 comprises computerprograms, firmware, or some other form of machine-readable programinstructions. Operating software 607 includes identify module 608, indexmodule 609, and couple module 610, although any number of softwaremodules may provide a similar operation. Operating software 607 mayfurther include an operating system, utilities, drivers, networkinterfaces, applications, or some other type of software. When executedby processing circuitry 605, operating software 607 directs processingsystem 603 to operate computing system 600 as described herein.

In one implementation, identify module 608 directs processing system 603to receive a request to identify one or more vertices of a first vertextype in graph 615, wherein the request may indicate attributes ofinterest associated with the one or more vertices. In someimplementations, the first vertex type may comprise a data instancevertex type, wherein the data instance vertex type may compriseattributes and may be indexed by one of the attributes. In response tothe request, index module 609 may direct processing system 603 identifya plurality of index vertices associated with the attributes ofinterest, and wherein the index vertices correspond to second vertextypes. Each of the second vertex types may correspond to an attributetype that is not used in indexing the data instance vertices. Forexample, in a social network, while the vertices representing users ofthe social network may be indexed using unique identifiers associatedwith the users, additional index vertices may be added that correspondto other attributes of the user. These index vertices may permittraversal of the index vertices to identify users associated withspecific attributes.

Once the index vertices are identified that correspond to the request,couple module 610 may direct processing system 603 to identify the oneor more vertices of the first type that are coupled to the indexvertices that are of a different type. In some implementations, couplemodule 610 may identify the coupled vertices in parallel for each of theindex vertices. In other implementations, couple module 610 may identifythe coupled vertices in serial, wherein the coupled vertices to a firstindex vertex may then be used to determine whether the

Although not depicted in computing system 600, it should be understoodthat one or more software modules may be used by computing system 600 togenerate the graph. In generating the graph, the computing system 600may identify, via user input, via information from a database, or fromsome other input source, information to generate the data instancevertices for graph 615. As the data instance vertices are generated forthe graph, computing system 600 may further determine other attributetypes of interest that could correspond to index vertices to be added tothe graph. The index vertices may be defined by an administratorassociated with graph 615, may be determined based on the frequency ofqueries to graph 615 regarding a particular attribute, or may bedetermined in any other manner. As an example, computing system 600 maymonitor the frequency of queries associated with each attribute type anddetermine when the frequency meets one or more criteria. When thefrequency of queries meets the one or more criteria (e.g., a minimumquantity of queries over time), computing system 600 may define a newindex vertex type associated with the attribute and generate indexvertices based on the attributes defined in the graph. These indexvertices may each correspond to single values (e.g., age, location,etc.) or may correspond to a range of values or multiple values. Thevalues for the index vertices may be defined by the administrator or maybe based on trends associated with the queries to the graph. Once theattribute types are identified and the index vertices are added to thegraph data instance vertices may be coupled to the index vertices thatshare common attributes. Thus, an index vertex that is associated with arange of ages may be coupled to all data instance vertices withattributes that fall within the range of ages.

The included descriptions and figures depict specific implementations toteach those skilled in the art how to make and use the best option. Forthe purpose of teaching inventive principles, some conventional aspectshave been simplified or omitted. Those skilled in the art willappreciate variations from these implementations that fall within thescope of the invention. Those skilled in the art will also appreciatethat the features described above can be combined in various ways toform multiple implementations. As a result, the invention is not limitedto the specific implementations described above, but only by the claimsand their equivalents.

What is claimed is:
 1. A method of searching a graph, wherein the graphcomprises a plurality of vertices of a first vertex type and a pluralityof index vertices of one or more other vertex types, the methodcomprising: receiving a request to identify one or more vertices of thefirst vertex type in the graph with one or more attributes; in responseto the request, identifying one or more index vertices of the pluralityof index vertices each with at least one attribute of the one or moreattributes, wherein the one or more index vertices comprise one or moresecond vertex types of the one or more other vertex types, wherein theone or more index vertices are each indexed using at least one attributeof the one or more attributes, and wherein the one or more vertices areeach indexed using a different attribute than the one or moreattributes; and identifying the one or more vertices in the graph basedon each vertex of the one or more vertices having one or more edges thatcouple the vertex to each of the one or more index vertices.
 2. Themethod of claim 1, wherein the plurality of vertices comprises datainstance vertices of the first vertex type.
 3. The method of claim 2,wherein identifying the one or more vertices in the graph based on eachof the one or more vertices having one or more edges that couple theedge to each of the one or more index vertices comprises: for each indexvertex in the one or more index vertices, generating a flag for any ofthe data instance vertices coupled to the index vertex; identifying aset of one or more of the data instance vertices that are coupled toeach of the one or more index vertices based on the flags; andidentifying the set of the one or more data instance vertices as the oneor more vertices.
 4. The method of claim 3, wherein the flags indicate aquantity of the one or more index vertices coupled to a data instancevertex in the graph.
 5. The method of claim 2, wherein identifying theone or more vertices in the graph based on each of the one or morevertices having one or more edges that couple the edge to each of theone or more index vertices comprises: (a) for a first index vertex ofthe one or more index vertices, identifying a first subset of the datainstance vertices coupled to the first index vertex; (b) afteridentifying the first subset and for a second index vertex of the one ormore index vertices, identifying a second subset of the data instancevertices from the first subset of the data instance vertices that iscoupled to the first index vertex and the second index vertex; (c)determine whether a subset of data instance vertices has been identifiedfor each vertex in the one or more index vertices; (d) in response todetermining that a subset of data instance vertices has not yet beenidentified for each vertex in the one or more index vertices, repeatingsteps (b) and (c) with the second index vertex as the first indexvertex, the second subset as the first subset, and a new index vertex ofthe one or more index vertices as the second index vertex; and (e) inresponse to determining that a subset of data instance vertices has beenidentified for each vertex in the one or more index vertices,identifying the second subset of the data instance vertices as the oneor more vertices.
 6. The method of claim 2, wherein the data instancevertices each comprise attribute types, wherein the data instancevertices are indexed using a first attribute type of the one or moreattribute types, and wherein the index vertices are indexed usingdifferent attribute types from the first attribute type.
 7. The methodof claim 1 further comprising causing, for display, one or moreattributes associated with the one or more vertices to respond to therequest.
 8. The method of claim 1 further comprising: identifying therequest from an obtained query to the graph; and processing one or moreattributes in the one or more vertices to generate a response to thequery.
 9. A computing apparatus comprising: one or more non-transitorycomputer readable storage media; a processing system operatively coupledto the one or more non-transitory computer readable storage media; andprogram instructions stored on the one or more non-transitory computerreadable storage media to search a graph comprising a plurality ofvertices of a first vertex type and a plurality of index vertices of oneor more other vertex types that, when executed by the processing system,direct the processing system to: receive a request to identify one ormore vertices of the first vertex type in the graph, wherein the requestindicates one or more attributes associated with the one or morevertices; in response to the request, identify one or more indexvertices of the plurality of index vertices each with at least oneattribute of the one or more attributes, wherein the one or more indexvertices comprise one or more second vertex types of the one or moreother vertex types, wherein the one or more index vertices are eachindexed using at least one attribute of the one or more attributes, andwherein the one or more vertices are each indexed using a differentattribute than the one or more attributes; and identify the one or morevertices in the graph based on each vertex of the one or more verticeshaving one or more edges that couple the vertex to each of the one ormore index vertices.
 10. The computing apparatus of claim 9, wherein theplurality of vertices comprises data instance vertices of the firstvertex type.
 11. The computing apparatus of claim 10, whereinidentifying the one or more vertices in the graph based on each of theone or more vertices having one or more edges that couple the edge toeach of the one or more index vertices comprises: for each index vertexin the one or more index vertices, generating a flag for any of the datainstance vertices coupled to the index vertex; identifying a set of oneor more of the data instance vertices that are coupled to each of theone or more index vertices based on the flags; and identifying the setof the one or more data instance vertices as the one or more vertices.12. The computing apparatus of claim 11, wherein the flags indicate aquantity of the one or more index vertices coupled to a data instancevertex in the graph.
 13. The computing apparatus of claim 10, whereinthe one or more vertices in the graph based on each of the one or morevertices having one or more edges that couple the edge to each of theone or more index vertices comprises: (a) for a first index vertex ofthe one or more index vertices, identifying a first subset of the datainstance vertices coupled to the first index vertex; (b) afteridentifying the first subset and for a second index vertex of the one ormore index vertices, identifying a second subset of the data instancevertices from the first subset of the data instance vertices that iscoupled to the first vertex and the second vertex; (c) determine whethera subset of data instance vertices has been identified for each vertexin the one or more index vertices; (d) in response to determining that asubset of data instance vertices has not yet been identified for eachvertex in the one or more index vertices, repeating steps (b) and (c)with the second index vertex as the first index vertex, the secondsubset as the first subset, and a new index vertex of the one or moreindex vertices as the second index vertex; and (e) in response todetermining that a subset of data instance vertices has been identifiedfor each vertex in the one or more index vertices, identifying thesecond subset of the data instance vertices as the one or more vertices.14. The computing apparatus of claim 9, wherein the program instructionsfurther direct the processing system to cause, for display, one or moreattributes associated with the one or more vertices to respond to therequest.
 15. The computing apparatus of claim 9, wherein the programinstructions further direct the processing system to: identify therequest from an obtained query to the graph; process one or moreattributes in the one or more vertices to generate a response to thequery.
 16. The computing apparatus of claim 15, wherein the programinstructions further direct the processing system to generate a displayof the response to the query.
 17. An apparatus comprising: one or morenon-transitory computer readable storage media; and program instructionsstored on the one or more non-transitory computer readable storage mediato search a graph comprising a plurality of vertices of a first vertextype and a plurality of index vertices of one or more other vertex typesthat, when executed by a processing system, direct a processing to:receive a request to identify one or more vertices of the first vertextype in the graph, wherein the request indicates attributes associatedwith the one or more vertices; in response to the request, identifyindex vertices of the plurality of index vertices each with at least oneattribute of the attributes, wherein the index vertices are each indexedusing at least one attribute of the attributes, and wherein the one ormore vertices are each indexed using a different attribute than theattributes; and identify the one or more vertices in the graph based oneach vertex of the one or more vertices having edges that couple thevertex to each of the index vertices.